#ifndef PALA_H_
#define PALA_H_

#include <GL/glut.h>
#include "displaylist.h"

class Pala : protected DisplayList {

   private:
      const float _anguloMinimo;
      const float _anguloMaximo;
      
      const float _ancho;
      const float _largo;
      const float _grosor;

      float _angulo;

      /*
       * Dibuja una figura plana sobre el eje XY cuyas dimensiones
       * son "ancho" (eje x), "largo" (eje y) y "grosor" (eje z).
       *
       * Su centro geometrico es desplazado hacia el eje -z de tal manera
       * que la superficie (con normal z) este sobre el plano XY 
       * (coordenada z = 0)
       *
       */
      void dibujarTabla() const;
      
      /*
       * Dibuja una figura plana sobre el eje YZ proporcional,
       * lado a lado al largo de la pala.
       * Su grosor, en X, es el mismo para el resto de las tablas.
       *
       * Se posiciona automaticamente en el plano YZ donde corresponde
       * dejando la posicion "x" a especificar.
       */
      void dibujarLateral(float x) const;

      virtual void ejecucion() const;

   public:
      Pala(float ancho, float largo, float grosor);
      virtual ~Pala();
      
      /*
       * Dibuja la pala cuyas tablas principales forman un _|,
       * donde el "piso" ( _ ) es paralelo al plano XY y la otra
       * tabla ( | ) es paralela al plano YZ
       *
       * El eje del modelo esta ubicado en el centro de la superfice
       * superior del piso. Esto es, dicha superficie esta en z = 0.
       *
       */

      virtual void dibujar() const;

      float angulo() const { return _angulo; }

      void angulo(float angulo) { 
         _angulo = angulo < _anguloMinimo ? _anguloMinimo : 
                                (angulo > _anguloMaximo? _anguloMaximo : angulo);
      }

      float ancho() const { return _ancho; }

      float largo() const { return _largo; }

      float grosor() const { return _grosor; }
};

#endif
